﻿using QuanLyThuVien.BLL;
using QuanLyThuVien.DTO;
using QuanLyThuVien.Supporter;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace QuanLyThuVien.GUI
{
    public partial class GUIPhieuNhap : DevComponents.DotNetBar.Office2007Form
    {
        private BLLPhieuNhap _bllPhieuNhap;
        private BLLCT_PhieuNhap _bllCT_PhieuNhap;
        private BLLTheLoai _bllTheLoaiSach;
        private BLLTacGia _bllTacGia;
        private BLLDauSach _bllDauSach;
        private BLLSach _bllSach;
        private BLLCuonSach _bllCuonSach;
        private BLLQuyDinh _bllQuyDinh;
        
        private DTOPhieuNhap _PhieuNhap;
        private List<DTODauSach> _DSDauSach;
        private THAOTAC _ThaoTac;

        //----------------------------------------------------------------------
        //Desc: constructor mặc định
        //----------------------------------------------------------------------
        public GUIPhieuNhap()
        {
            InitializeComponent();

            KhoiTao();
            _ThaoTac = THAOTAC.XEM;
            _PhieuNhap = new DTOPhieuNhap();
        }

        //----------------------------------------------------------------------
        //Desc: constructor 1 tham số
        //----------------------------------------------------------------------
        public GUIPhieuNhap(THAOTAC thaotac)
        {
            InitializeComponent();

            KhoiTao();
            _ThaoTac = thaotac;
            _PhieuNhap = new DTOPhieuNhap();
        }

        //----------------------------------------------------------------------
        //Desc: constructor 2 tham số
        //----------------------------------------------------------------------
        public GUIPhieuNhap(THAOTAC thaotac, DTOPhieuNhap phieunhap)
        {
            InitializeComponent();

            KhoiTao();
            _ThaoTac = thaotac;
            _PhieuNhap = phieunhap;
        }

        //----------------------------------------------------------------------
        //Desc: khởi tạo
        //----------------------------------------------------------------------
        public void KhoiTao()
        {
            _bllPhieuNhap = new BLLPhieuNhap();
            _bllCT_PhieuNhap = new BLLCT_PhieuNhap();
            _bllTheLoaiSach = new BLLTheLoai();
            _bllTacGia = new BLLTacGia();
            _bllDauSach = new BLLDauSach();
            _bllSach = new BLLSach();
            _bllCuonSach = new BLLCuonSach();
            _bllQuyDinh = new BLLQuyDinh();

            _PhieuNhap = new DTOPhieuNhap();
            _DSDauSach = new List<DTODauSach>();
        }

        ///----------------------------------------------------------------------
        //Desc: hiển thị ds đầu sách
        //----------------------------------------------------------------------
        public void HienThiDSDauSach()
        {
            _DSDauSach = _bllDauSach.LayDSDauSach();
            if (_DSDauSach != null)
            {
                for (int i = 0; i < _DSDauSach.Count; i++)
                {
                    try
                    {
                        _cboTenDauSach.Items.Add(_DSDauSach[i].TenDauSach);
                    }
                    catch { }
                }
            }
            else
                MessageBox.Show("Không lấy được tên sách để hiển thị");
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật giao diện
        //----------------------------------------------------------------------
        public void CapNhatGiaoDien()
        {
            switch (_ThaoTac)
            { 
                case THAOTAC.THEM:
                    this.Text = "TIẾP NHẬN SÁCH MỚI";
                    _grpThongTinSach.Visible = true;
                    _btnLoadDS.Visible = true;
                    _btnThemMoi.Visible = true;
                    _btnThemVaoDSTam.Visible = true;
                    _btnThemSach.Visible = true;
                    //_btnSua.Visible = false;
                    
                    break;
                case THAOTAC.SUA:
                    this.Text = "THÔNG TIN PHIẾU NHẬP";
                    _grpThongTinSach.Visible = false;
                    _btnLoadDS.Visible = false;
                    _btnThemMoi.Visible = true;
                    _btnThemVaoDSTam.Visible = false;
                    _btnThemSach.Visible = false;
                    //_btnSua.Visible = true;
                   
                    break;
                case THAOTAC.XEM:
                    this.Text = "THÔNG TIN PHIẾU NHẬP";
                    _grpThongTinSach.Visible = false;
                    _btnLoadDS.Visible = false;
                    _btnThemMoi.Visible = false;
                    _btnThemVaoDSTam.Visible = false;
                    _btnThemSach.Visible = false;
                    //_btnSua.Visible = false;
                    break;
            }
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật nội dung
        //----------------------------------------------------------------------
        public void CapNhatNoiDung()
        {
            switch (_ThaoTac)
            { 
                case THAOTAC.THEM:
                    _dtNgayNhap.Value = DateTime.Today;
                    _PhieuNhap.NgayNhap = DateTime.Today;
                    break;
                default:
                    HienThiThongTinPhieuNhap();
                    break;
            }
        }

        //----------------------------------------------------------------------
        //Desc: hiển thị thông tin phiếu nhập
        //----------------------------------------------------------------------
        public void HienThiThongTinPhieuNhap()
        { 
            for (int i = 0; i < _PhieuNhap.DSCTPhieuNhap.Count; i++)
            {
                string tendausach = "";
                for (int j = 0; j < _DSDauSach.Count; j++)
                {
                    if (_DSDauSach[j].MaDauSach == _PhieuNhap.DSCTPhieuNhap[i].Sach.MaDauSach)
                    {
                        tendausach = _DSDauSach[j].TenDauSach;
                        break;
                    }
                }
                HienThiLenDataGridView(tendausach, _PhieuNhap.DSCTPhieuNhap[i].Sach.NamXB,
                    _PhieuNhap.DSCTPhieuNhap[i].Sach.NhaXB, _PhieuNhap.DSCTPhieuNhap[i].Sach.TriGia,
                    _PhieuNhap.DSCTPhieuNhap[i].Sach.SoLuong, _PhieuNhap.DSCTPhieuNhap[i].ThanhTien);
            }
            _txtTongTriGia.Text = _PhieuNhap.TongTriGia.ToString();
        }

        //----------------------------------------------------------------------
        //Desc: lấy dữ liệu
        //----------------------------------------------------------------------
        public DTOCT_PhieuNhap LayDuLieuForm()
        {
            DTOCT_PhieuNhap ctphieunhap = new DTOCT_PhieuNhap();

            if (_cboTenDauSach.Text == "")
            {
                MessageBox.Show("Chưa chọn tên đầu sách");
                return null;
            }
            string madausach = "";
            try
            {
                madausach = _DSDauSach[_cboTenDauSach.SelectedIndex].MaDauSach;
            }
            catch
            { 
                MessageBox.Show("Không lấy được mã đầu sách");
            }
            if (madausach == null || madausach == "")
                return null;
            else
                ctphieunhap.Sach.MaDauSach = madausach;


            try
            {
                ctphieunhap.Sach.NamXB = long.Parse(_txtNamXB.Text);
            }
            catch
            {
                MessageBox.Show("Nhập sai năm xuất bản");
                return null;
            }
            if (ctphieunhap.Sach.NamXB <= 0)
            {
                MessageBox.Show("Năm phải lớn hơn 0");
                return null;
            }
            //kiểm tra thời hạn xb
            int thoihanxb = _bllQuyDinh.LayThoiHanXB();
            if (thoihanxb > 0)
            {
                int nam = _dtNgayNhap.Value.Year;
                if (ctphieunhap.Sach.NamXB + thoihanxb < nam)
                {
                    MessageBox.Show("Chỉ nhận các sách xuất bản trong vòng " + thoihanxb.ToString() + " năm");
                    return null;
                }
            }
            else
            {
                MessageBox.Show("Không lấy được quy định thời hạn xuất bản");
                return null;
            }


            if (_txtNhaXB.Text == "")
            {
                MessageBox.Show("Chưa nhập nhà xb");
                return null;
            }
            else
                ctphieunhap.Sach.NhaXB = _txtNhaXB.Text;


            try
            {
                ctphieunhap.Sach.TriGia = Double.Parse(_txtTriGia.Text);
            }
            catch
            {
                MessageBox.Show("Nhập sai trị giá");
                return null;
            }
            if (ctphieunhap.Sach.TriGia <= 0)
            {
                MessageBox.Show("Trị giá phải lớn hơn 0");
                return null;
            }
            else
                ctphieunhap.TriGia = ctphieunhap.Sach.TriGia;


            try
            {
                ctphieunhap.Sach.SoLuong = Int32.Parse(_txtSoLuong.Text);
            }
            catch
            {
                MessageBox.Show("Nhập sai số lượng");
                return null;
            }
            if (ctphieunhap.Sach.SoLuong <= 0)
            {
                MessageBox.Show("Số lượng phải lớn hơn 0");
                return null;
            }
            else
                ctphieunhap.SoLuong = ctphieunhap.Sach.SoLuong;

            ctphieunhap.Sach.NgayNhap = _dtNgayNhap.Value;
            ctphieunhap.ThanhTien = ctphieunhap.TriGia * ctphieunhap.SoLuong;
            ctphieunhap.Sach.MaSach = _bllSach.LayMaSach(ctphieunhap.Sach.MaDauSach, ctphieunhap.Sach.NamXB, ctphieunhap.Sach.NhaXB);
            return ctphieunhap;
        }

        //----------------------------------------------------------------------
        //Desc: kiểm tra tên các cột trong file excel có đúng định dạng không
        //----------------------------------------------------------------------
        private bool KiemTraDataTable(DataTable data)
        {
            try
            {
                bool exitst = false;
                for (int i = 0; i < data.Columns.Count; i++)
                {
                    if (data.Columns[i].ColumnName == "MaDauSach")
                        exitst = true;
                }
                if (!exitst)
                    return false;

                exitst = false;
                for (int i = 0; i < data.Columns.Count; i++)
                {
                    if (data.Columns[i].ColumnName == "NamXB")
                        exitst = true;
                }
                if (!exitst)
                    return false;

                exitst = false;
                for (int i = 0; i < data.Columns.Count; i++)
                {
                    if (data.Columns[i].ColumnName == "NhaXB")
                        exitst = true;
                }
                if (!exitst)
                    return false;

                exitst = false;
                for (int i = 0; i < data.Columns.Count; i++)
                {
                    if (data.Columns[i].ColumnName == "TriGia")
                        exitst = true;
                }
                if (!exitst)
                    return false;

                exitst = false;
                for (int i = 0; i < data.Columns.Count; i++)
                {
                    if (data.Columns[i].ColumnName == "SoLuong")
                        exitst = true;
                }
                if (!exitst)
                    return false;

                return true;
            }
            catch { return false; }
        }

        //----------------------------------------------------------------------
        //Desc: lấy dữ liệu từ file excel
        //----------------------------------------------------------------------
        public DTOCT_PhieuNhap LayDuLieuTuFileExcel(DataRow row, int thoihanxb)
        {
            try
            {
                DTOCT_PhieuNhap ctphieunhap = new DTOCT_PhieuNhap();

                string madausach = row["MaDauSach"].ToString();
                if (madausach == "")
                    return null;
                else
                {
                    bool tontaimads = false;
                    for (int i = 0; i < _DSDauSach.Count; i++)
                    {
                        if (_DSDauSach[i].MaDauSach.ToLower() == madausach.ToLower())
                        {
                            tontaimads = true;
                            break;
                        }
                    }
                    if (tontaimads)
                        ctphieunhap.Sach.MaDauSach = madausach;
                    else
                        return null;
                }

                try
                {
                    ctphieunhap.Sach.NamXB = long.Parse(row["NamXB"].ToString());
                }
                catch
                {
                    return null;
                }
                if (ctphieunhap.Sach.NamXB <= 0)
                    return null;
                //kiểm tra thời hạn xb
                int nam = _dtNgayNhap.Value.Year;
                if (ctphieunhap.Sach.NamXB + thoihanxb < nam)
                {
                    return null;
                }

                if (row["NhaXB"].ToString() == "")
                    return null;
                else
                    ctphieunhap.Sach.NhaXB = row["NhaXB"].ToString();


                try
                {
                    ctphieunhap.Sach.TriGia = Double.Parse(row["TriGia"].ToString());
                }
                catch
                {
                    return null;
                }
                if (ctphieunhap.Sach.TriGia <= 0)
                    return null;
                else
                    ctphieunhap.TriGia = ctphieunhap.Sach.TriGia;


                try
                {
                    ctphieunhap.Sach.SoLuong = Int32.Parse(row["SoLuong"].ToString());
                }
                catch
                {
                    return null;
                }
                if (ctphieunhap.Sach.SoLuong <= 0)
                    return null;
                else
                    ctphieunhap.SoLuong = ctphieunhap.Sach.SoLuong;

                ctphieunhap.Sach.NgayNhap = _dtNgayNhap.Value;
                ctphieunhap.ThanhTien = ctphieunhap.TriGia * ctphieunhap.SoLuong;
                ctphieunhap.Sach.MaSach = _bllSach.LayMaSach(ctphieunhap.Sach.MaDauSach, ctphieunhap.Sach.NamXB, ctphieunhap.Sach.NhaXB);
                return ctphieunhap;
            }
            catch { return null; }
        }

        //----------------------------------------------------------------------
        //Desc: xóa thông tin hiển thị
        //----------------------------------------------------------------------
        public void Xoa()
        {
            _txtTheLoai.Text = "";
            _txtTacGia.Text = "";
            _txtNamXB.Text = "";
            _txtNhaXB.Text = "";
            _txtTriGia.Text = "";
            _txtSoLuong.Text = "";
            _txtThanhTien.Text = "";
        }

        //----------------------------------------------------------------------
        //Desc: xóa tất cả thông tin hiển thị
        //----------------------------------------------------------------------
        public void XoaTatCa()
        {
            _PhieuNhap.Reset();
            _txtTongTriGia.Text = "";
            try
            {
                _dgwDSSach.Rows.Clear();
            }
            catch { }
        }

        //----------------------------------------------------------------------
        //Desc: hiển thị lên datagridview
        //----------------------------------------------------------------------
        public void HienThiLenDataGridView(string tendausach, long namxb, string nhaxb,
            double trigia, int soluong, double thanhtien)
        {
            try
            {
                _dgwDSSach.Rows.Add(tendausach, namxb.ToString(), nhaxb,
                    trigia.ToString(), soluong.ToString(), thanhtien.ToString());
            }
            catch{ }
        }


        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện form load
        //----------------------------------------------------------------------
        private void GUITiepNhanSach_Load(object sender, EventArgs e)
        {
            HienThiDSDauSach();
            CapNhatGiaoDien();
            CapNhatNoiDung();
        }

        ///----------------------------------------------------------------------
        //Desc: xử lý sự kiện thay đổi đầu sách
        //----------------------------------------------------------------------
        private void cboTenDauSach_SelectedIndexChanged(object sender, EventArgs e)
        {
            string madausach = "";
            try
            { 
                madausach = _DSDauSach[_cboTenDauSach.SelectedIndex].MaDauSach;
            }
            catch
            {
                MessageBox.Show("Không tìm thấy mã đầu sách");
            }
            if (madausach == null || madausach == "")
                return;

            string tentl = _bllDauSach.LayTenTL(madausach);
            if (tentl != null)
                _txtTheLoai.Text = tentl;
            else
                _txtTheLoai.Text = "";

            List<string> dstacgia = _bllDauSach.LayDSTenTG(madausach);
            if (dstacgia != null)
            {
                string tentg = "";
                if (dstacgia.Count > 0)
                    tentg = dstacgia[0];
                if (dstacgia.Count > 1)
                {
                    for (int i = 1; i < dstacgia.Count; i++)
                        tentg += ", " + dstacgia[i];
                }
                _txtTacGia.Text = tentg;
            }
            else
                _txtTacGia.Text = "";


        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện thay đổi trị giá
        //----------------------------------------------------------------------
        private void txtTriGia_TextChanged(object sender, EventArgs e)
        {
            long trigia = 0;
            int soluong = 0;
            try
            {
                trigia = long.Parse(_txtTriGia.Text);
                soluong = Int32.Parse(_txtSoLuong.Text);
            }
            catch{ }

            _txtThanhTien.Text = (trigia * soluong).ToString();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện thay đổi số lượng
        //----------------------------------------------------------------------
        private void txtSoLuong_TextChanged(object sender, EventArgs e)
        {
            long trigia = 0;
            int soluong = 0;
            try
            {
                trigia = long.Parse(_txtTriGia.Text);
                soluong = Int32.Parse(_txtSoLuong.Text);
            }
            catch { }

            _txtThanhTien.Text = (trigia * soluong).ToString();
        }

        ///----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button Thoat
        //----------------------------------------------------------------------
        private void btnThoat_Click(object sender, EventArgs e)
        {
            Close();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button ThemvaoDSTam
        //----------------------------------------------------------------------
        private void btnThemVaoDSTam_Click(object sender, EventArgs e)
        {
            DTOCT_PhieuNhap ctpn = LayDuLieuForm();
            if (ctpn != null)
            {
                _PhieuNhap.DSCTPhieuNhap.Add(ctpn);
                _PhieuNhap.TongTriGia += ctpn.ThanhTien;
                HienThiLenDataGridView(_cboTenDauSach.Text, ctpn.Sach.NamXB, ctpn.Sach.NhaXB,
                    ctpn.Sach.TriGia, ctpn.Sach.SoLuong, ctpn.ThanhTien);
                Xoa();
                _txtTongTriGia.Text = _PhieuNhap.TongTriGia.ToString();
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button ThemSach
        //----------------------------------------------------------------------
        private void btnThemSach_Click(object sender, EventArgs e)
        {
            if (_PhieuNhap.DSCTPhieuNhap.Count == 0)
            {
                MessageBox.Show("Chưa nhập sách nào");
                return;
            }
            _PhieuNhap.NgayNhap = _dtNgayNhap.Value;
            if (_bllPhieuNhap.PhatSinhMaPhieuNhap(ref _PhieuNhap))
            {
                //thêm phiếu nhập
                if (_bllPhieuNhap.CapNhat(_PhieuNhap))
                {
                    int sosachthem = 0;
                    int socuonsachthem = 0;
                    for (int i = 0; i < _PhieuNhap.DSCTPhieuNhap.Count; i++)
                    {
                        if (_PhieuNhap.DSCTPhieuNhap[i].Sach.MaSach == null)
                        {
                            DTOSach sach = new DTOSach(_PhieuNhap.DSCTPhieuNhap[i].Sach);
                            if (_bllSach.PhatSinhMaSach(ref sach))
                            {
                                //thêm sách
                                _PhieuNhap.DSCTPhieuNhap[i].Sach.MaSach = sach.MaSach;
                                if (_bllSach.CapNhat(_PhieuNhap.DSCTPhieuNhap[i].Sach))
                                {
                                    sosachthem++;
                                    //thêm ds cuốn sách
                                    for (int j = 0; j < _PhieuNhap.DSCTPhieuNhap[i].SoLuong; j++)
                                    {
                                        DTOCuonSach cuonsach = new DTOCuonSach(_PhieuNhap.DSCTPhieuNhap[i].Sach.MaSach, true);
                                        if (_bllCuonSach.PhatSinhMaCuonSach(ref cuonsach))
                                        {
                                            if (_bllCuonSach.CapNhat(cuonsach))
                                                socuonsachthem++;
                                        }
                                    }
                                }
                                //thêm ct phiếu nhập
                                if (_bllCT_PhieuNhap.CapNhat(_PhieuNhap.DSCTPhieuNhap[i]))
                                { 
                                    //
                                }
                                
                            }
                            else
                            {
                                //
                            }
                        }
                        else
                        { 
                            //thêm ds cuốn sách
                            int slthem = 0;
                            for (int j = 0; j < _PhieuNhap.DSCTPhieuNhap[i].SoLuong; j++)
                            {
                                DTOCuonSach cuonsach = new DTOCuonSach(_PhieuNhap.DSCTPhieuNhap[i].Sach.MaSach, false);
                                if (_bllCuonSach.PhatSinhMaCuonSach(ref cuonsach))
                                {
                                    if (_bllCuonSach.CapNhat(cuonsach))
                                    {
                                        socuonsachthem++;
                                        slthem++;
                                    }
                                }
                            }
                            //cập nhật lại số lượng cuốn sách
                            int soluongcu = _bllSach.LaySoLuongSach(_PhieuNhap.DSCTPhieuNhap[i].Sach.MaSach);
                            if (soluongcu < 0)
                                soluongcu = 0;
                            int soluongmoi = soluongcu + slthem;
                            _bllSach.CapNhatSoLuong(_PhieuNhap.DSCTPhieuNhap[i].Sach.MaSach, soluongmoi);

                            //thêm ct phiếu nhập
                            if (_bllCT_PhieuNhap.CapNhat(_PhieuNhap.DSCTPhieuNhap[i]))
                            {
                                //
                            }
                        }
                        

                    }
                    MessageBox.Show("Thêm thành công " + sosachthem.ToString() + " sách, "
                                                       + socuonsachthem.ToString() + " cuốn sách");
                    //xóa những sách đã thêm
                    _ThaoTac = THAOTAC.SUA;
                    CapNhatGiaoDien();
                }
                else
                {
                    MessageBox.Show("Thêm thất bại");
                }
            }
            else
                MessageBox.Show("Không tạo đươc mã phiếu nhập");
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button LoadDanhSach
        //----------------------------------------------------------------------
        private void btnLoadDS_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "Excel files (*.xlsx, *.xls)|*.xlsx;*.xls";
            dlg.ShowDialog();
            string fileName = dlg.FileName;
            if (fileName != "")
            {
                DataTable data = Utils.ReadExcelFile(fileName);
                if (data == null)
                    MessageBox.Show("Đọc file thất bại");
                else if (!KiemTraDataTable(data))
                    MessageBox.Show("File không đúng định dạng");
                else
                {
                    int thoihanxb = _bllQuyDinh.LayThoiHanXB();
                    if (thoihanxb < 0)
                        MessageBox.Show("Không lấy được quy định thời hạn xb");
                    else
                    {
                        foreach (DataRow row in data.Rows)
                        {
                            DTOCT_PhieuNhap ctpn = LayDuLieuTuFileExcel(row, thoihanxb);
                            if (ctpn != null)
                            {
                                _PhieuNhap.DSCTPhieuNhap.Add(ctpn);
                                string tendausach = "";
                                for (int i = 0; i < _DSDauSach.Count; i++)
                                {
                                    if (_DSDauSach[i].MaDauSach == ctpn.Sach.MaDauSach)
                                    {
                                        tendausach = _DSDauSach[i].TenDauSach;
                                        break;
                                    }
                                }
                                _PhieuNhap.TongTriGia += ctpn.ThanhTien;
                                HienThiLenDataGridView(tendausach, ctpn.Sach.NamXB, ctpn.Sach.NhaXB,
                                    ctpn.Sach.TriGia, ctpn.Sach.SoLuong, ctpn.ThanhTien);
                            }
                        }
                    }
                    _txtTongTriGia.Text = _PhieuNhap.TongTriGia.ToString();
                }
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button ThemMoi
        //----------------------------------------------------------------------
        private void btnThemMoi_Click(object sender, EventArgs e)
        {
            XoaTatCa();
            _ThaoTac = THAOTAC.THEM;
            CapNhatGiaoDien();
            CapNhatNoiDung();
        }

        //----------------------------------------------------------------------
        //Desc: bắt sự kiện ThemDauSach ở GUIDauSach
        //----------------------------------------------------------------------
        private void BatSuKienThemDauSach(object sender)
        {
            DTODauSach dausach;
            try
            {
                dausach = sender as DTODauSach;
            }
            catch
            { dausach = null; }
            if (dausach != null)
            {
                _DSDauSach.Add(dausach);
                _cboTenDauSach.Items.Add(dausach.TenDauSach);
                try
                {
                    _cboTenDauSach.SelectedIndex = _cboTenDauSach.Items.Count - 1;
                }
                catch { }
            }

        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button ThemDauSach
        //----------------------------------------------------------------------
        private void btnThemDauSach_Click(object sender, EventArgs e)
        {
            if (UserManager.User != null && (UserManager.User.LoaiNguoiDung == LOAI_NGUOI_DUNG.NguoiQuanTri
                || UserManager.User.LoaiNguoiDung == LOAI_NGUOI_DUNG.ThuThu))
            {
                GUIDauSach guidausach = new GUIDauSach(THAOTAC.THEM);
                guidausach.SuKienThemDauSach += new GUIDauSach.XuLySuKienThemDauSach(BatSuKienThemDauSach);
                guidausach.ShowDialog();
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện trước khi xóa 1 dòng của data grid view
        //----------------------------------------------------------------------
        private void dgwDSSach_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            switch (_ThaoTac)
            {
                case THAOTAC.THEM:
                    string masach = "";
                    try
                    {
                        masach = (string)e.Row.Cells[0].Value;
                    }
                    catch { masach = null; }

                    if (masach != null && masach != "")
                    {
                        DialogResult result = MessageBox.Show("Bạn có muốn xóa sách "
                            + masach + " khỏi phiếu nhập?", "THÔNG BÁO", MessageBoxButtons.OKCancel);
                        if (result == System.Windows.Forms.DialogResult.OK)
                        {
                            DTOCT_PhieuNhap ctpn = null;
                            try
                            {
                                ctpn = _PhieuNhap.DSCTPhieuNhap[e.Row.Index];
                            }
                            catch { }
                            if (ctpn != null)
                            {
                                _PhieuNhap.TongTriGia -= ctpn.ThanhTien;
                                _PhieuNhap.DSCTPhieuNhap.Remove(ctpn);
                                _txtTongTriGia.Text = _PhieuNhap.TongTriGia.ToString();
                            }

                        }
                        else
                            e.Cancel = true;
                    }
                    else
                        e.Cancel = true;

                    break;
                default:
                    e.Cancel = true;
                    break;
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện key press
        //----------------------------------------------------------------------
        private void txtNhapSo_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e != null)
            {
                if (Utils.CheckKeyCode(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện key press
        //----------------------------------------------------------------------
        private void Special_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Utils.IsSpecialKey(e.KeyChar))
                e.Handled = true;
            else
                e.Handled = false;
        }
    }
}
